home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 04 / 1 / DISK0416.ZIP / ROFF41.C < prev    next >
C/C++ Source or Header  |  1985-08-08  |  7KB  |  164 lines

  1. /********************************************************/
  2. /*                                                      */
  3. /*                  ROFF4, Version 1.60                 */
  4. /*                                                      */
  5. /*(C) 1983,4 by Ernest E. Bergmann                      */
  6. /*              Physics, Building #16                   */
  7. /*              Lehigh Univerisity                      */
  8. /*              Bethlehem, Pa. 18015                    */
  9. /*                                                      */
  10. /* Permission is hereby granted for all commercial and  */
  11. /* non-commercial reproduction and distribution of this */
  12. /* material provided this notice is included.           */
  13. /*                                                      */
  14. /********************************************************/
  15. /*Jan 8, 1984*/
  16. #include "roff4.h"
  17. /**********************************************************
  18. Removes white-space characters at start of string.
  19. ***********************************************************/
  20. skip_blanks ( string )
  21. char *string;   /* cursor to original string */
  22. {
  23.       char *p;       /* cursor to 'final' string */
  24.       for(p=string;*string==BLANK||*string==TAB||*string==NEWLINE;
  25.         string++);
  26.           while(*(p++) = *(string++));
  27. }
  28. /*************************************************************/
  29. int comtyp (line)
  30. char *line;
  31. {
  32.       char let1, let2;
  33.       let1 = toupper( line[1] );
  34.       let2 = toupper( line[2] );
  35.  
  36.       if ( let1==COMMAND )            return( IG );
  37.       if ( let1=='I' && let2=='G')    return( IG );
  38.       if ( let1=='F' && let2=='I')    return( FI );
  39.       if ( let1=='F' && let2=='O')    return( FO );
  40.       if ( let1=='T' && let2=='I')    return( TI );
  41.       if ( let1=='B' && let2=='P')    return( BP );
  42.       if ( let1=='B' && let2=='R')    return( BR );
  43.       if ( let1=='C' && let2=='E')    return( CE );
  44.       if ( let1=='H' && let2=='E')    return( HE );
  45.       if ( let1=='I' && let2=='N')    return( IN );
  46.       if ( let1=='L' && let2=='S')    return( LS );
  47.       if ( let1=='N' && let2=='F')    return( NF );
  48.       if ( let1=='P' && let2=='L')    return( PL );
  49.       if ( let1=='R' && let2=='M')    return( RM );
  50.       if ( let1=='S' && let2=='P')    return( SP );
  51.       if ( let1=='S' && let2=='T')    return( ST );
  52.       if ( let1=='N' && let2=='E')    return( NE );
  53.       if ( let1=='F' && let2=='F')    return( FF );
  54.       if ( let1=='S' && let2=='C')    return( SC );
  55.       if ( let1=='O' && let2=='W')    return( OW );
  56.       if ( let1=='T' && let2=='S')    return( TS );
  57.       if ( let1=='O' && let2=='H')    return( OH );
  58.       if ( let1=='O' && let2=='F')    return( OF );
  59.       if ( let1=='E' && let2=='H')    return( EH );
  60.       if ( let1=='E' && let2=='F')    return( EF );
  61.       if ( let1=='A' && let2=='B')    return( AB );
  62. #ifdef DEBUGON
  63.       if ( let1=='D' && let2=='B')    return( DB );
  64. #endif
  65.       if ( let1=='T' && let2=='C')    return( TC );
  66.       if ( let1=='T' && let2=='R')    return( TR );
  67.       if ( let1=='C' && let2=='F')    return( CF );
  68.       if ( let1=='I' && let2=='C')    return( IC );
  69.       if ( let1=='O' && let2=='U')    return( OU );
  70.       if ( let1=='J' && let2=='U')    return( JU );
  71.       if ( let1=='N' && let2=='J')    return( NJ );
  72.       if ( let1=='F' && let2=='R')    return( FR );
  73.       if ( let1=='W' && let2=='H')    return( WH );
  74.       if ( let1=='E' && let2=='M')    return( EM );
  75.       if ( let1=='D' && let2=='M')    return( DM );
  76.       if ( let1=='D' && let2=='S')    return( DS );
  77.       if ( let1=='R' && let2=='G')    return( RG );
  78.       if ( let1=='D' && let2=='I')    return( DI );
  79.       if ( let1=='E' && let2=='D')    return( ED );
  80.       if ( let1=='S' && let2=='O')    return( SO );
  81.       if ( let1=='P' && let2=='C')    return( PC );
  82.       if ( let1=='S' && let2=='A')    return( SA );
  83.       if ( let1=='B' && let2=='J')    return( BJ );
  84.  
  85.       if ( let1=='M')
  86.       { 
  87.             if (let2=='1')          return( M1 );
  88.             if (let2=='2')          return( M2 );
  89.             if (let2=='3')          return( M3 );
  90.             if (let2=='4')          return( M4 );
  91.       }
  92.       return( UNKNOWN );              /* no match */
  93. }
  94. /*************************************************************
  95. gets the number ( if any ) associated with any command 
  96. *************************************************************/
  97. int get_val ( line, typ )
  98. char *line, *typ;
  99. {
  100.       int i;
  101.       char local[ MAXLINE ];
  102.       strcpy (local, line);   /* local copy */
  103.       /* skip over the command line */
  104.       for(i=1; local[i]!=' '&&local[i]!='\t'&&local[i]!='\n' ;i++);
  105.  
  106.       skip_blanks (&local[i]);        /* find the number */
  107.       *typ = local[i];        /* relative or absolute */
  108.       if ( *typ=='+' || *typ=='-' )   i++;
  109.       else if ( !isdigit( *typ ) )    return( NO_VAL );
  110.       return ( atoi( &local[i] ));
  111. }
  112. /*************************************************************
  113.  sets a global parameter like SPVAL, PAGESTOP, etc.
  114.  Also checks that the new value is within the range of that 
  115.  parameter.  Assigns the default for that parameter if no value
  116.   is specified.
  117. *************************************************************/
  118. set ( param, val, arg_typ, defval, minval, maxval )
  119. int *param, val, defval, minval, maxval;
  120. char arg_typ;
  121. {
  122.       if(val==NO_VAL) *param = defval;       /* defaulted */
  123.       else if(arg_typ == '+') *param += val;  /* relative + */
  124.       else if(arg_typ == '-') *param -= val;  /* relative - */
  125.       else    *param = val;                   /* absolute */
  126.       *param = min (*param,maxval);
  127.       *param = max (*param, minval);
  128. #ifdef DEBUGON
  129.       if DEBUG fprintf(STDERR,"\tSET *param = %d\n", *param);
  130. #endif
  131. }
  132. /*************************************************************
  133.         end current filled line 
  134. **************************************************************/
  135. brk()
  136. {
  137.       int l;
  138. #ifdef DEBUGON
  139.       if DEBUG fprintf(STDERR,"brk: OUTBUF=<%s>\n", OUTBUF);
  140. #endif
  141.       if (OUTPOS) put(OUTBUF);
  142.       OUTW=OUTPOS=OUTTOP=OUTBOT=OUTWRDS = 0;
  143.       OUTBUF[0] = '\0';
  144. }
  145.  
  146. /**************************************************/
  147. initxu()        /*initialize underline,overstrike variables*/
  148. {       
  149.       XCOL=UCOL=-1;
  150.       setmem(&XBUF,LSZ,' ');
  151.       setmem(&UBUF,LSZ,' ');
  152. }
  153. /****************************************/
  154. need(n) /*test for space before footer*/
  155. int n;  /*whole lines*/
  156. {
  157.       if (( VLINENO>=(BOTTOM-n) ) && (BOTTOM>=VLINENO) )
  158.       {
  159.             space(HUGE); 
  160.             NEWPAG= ++CURPAG;
  161.       }
  162. }
  163.  
  164.